TempDB可以想像是SQL Server放在硬碟的暫存檔一樣,
除了在記憶體不足時將會使用TempDB來做運算之外,
在其它SQL Server會使用到TempDB的情況如下:
有時侯在查看活動監視器時會發現CPU Loading會拉高到80%以上並持續一段時間,
此時可以輸入以下SQL Query來看是不是太多DB在等待使用TempDB,因而導致CPU在等待IO回應。
SELECT session_id, wait_type, wait_duration_ms, resource_description
FROM sys.dm_os_waiting_tasks
WHERE
(wait_type like 'pagelatch_%' or wait_type like 'pageiolatch_%') and resource_description like '2:%'
那麼該如何減少多個DB去搶TempDB的資源的情況發生呢?
依照微軟的建議的作法,需要依照該台主機的CPU總Core數/2的數量來建立TempDB資料檔案,
例如總共有8 Core/2則要建立4個TempDB資料檔案,其建立的Script如下:
USE [master]
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp2',
FILENAME = N'E:\Program Files\Microsoft SQL Server 2016\MSSQL13.MSSQL2K16\MSSQL\DATA\temp2.ndf' ,
SIZE = 8192KB , FILEGROWTH = 65536KB )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp3',
FILENAME = N'E:\Program Files\Microsoft SQL Server 2016\MSSQL13.MSSQL2K16\MSSQL\DATA\temp3.ndf' ,
SIZE = 8192KB , FILEGROWTH = 65536KB )
GO
--⋯⋯⋯⋯⋯⋯以此類推下去
TempDB如果要加強讀寫速度,建議可以規劃將資料檔案分散建立在不同的硬碟
,用意是在存取資料時有機會能使用到多個磁碟讀寫頭同時進行讀取和寫入。
參考資源:https://technet.microsoft.com/zh-tw/library/ms175527(v=sql.105).aspx